﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using InterfazPublica;
using _5deOro.Interfaz;
using System.Windows.Forms;
using System.Xml;

namespace _5deOro.Dominio
{
    public class Juego5deOro : IJuegos
    {
        private string nombre = "5 de Oro";

        private IngresoNumeros FormIngresoNumeros;

        public Juego5deOro() {

            this.FormIngresoNumeros = new IngresoNumeros();
        }

        public DatosApuesta RealizarApuesta() 
        {
            DatosApuesta DatosApuesta = new DatosApuesta();
            IngresoNumeros FormIngresoNumeros = (IngresoNumeros)this.CargarFormulario();
            string DatosFormulario = FormIngresoNumeros.ObtenerApuesta();

            if (FormIngresoNumeros.EsValidaApuesta()) //Chequea si es valida la apuesta
            {
                //Hago la llamada al WebService para Generar la apuesta y devuelve un string con los datos
                ServiceReference2.Service1Client cliente = new ServiceReference2.Service1Client();

                DatosApuesta.id_apuesta = cliente.GenerarApuesta(DatosFormulario);

                string[] DatosFormularioParsed = DatosFormulario.Split(';');
                DatosApuesta.valores = DatosFormularioParsed[0] + ";" + DatosFormularioParsed[1];
                DatosApuesta.monto = Int32.Parse(DatosFormularioParsed[2]);

                LimpiarFormulario();
            }
            else 
            {
                DatosApuesta = null;
            }

            return (DatosApuesta);
        }

        public double CorrespondePremio(Guid idApuesta)
        {
            ServiceReference2.Service1Client cliente = new ServiceReference2.Service1Client();
            double Premio = cliente.CorrespondePremio(idApuesta);

            return Premio;
        }

        public bool EfectuarPago(Guid idApuesta)
        {
            ServiceReference2.Service1Client cliente = new ServiceReference2.Service1Client();
            bool Retorno = cliente.EfectuarPago(idApuesta);

            return Retorno;
        }

        /// <summary>
        /// Retorna el formulario asociado al Juego
        /// </summary>
        /// <returns></returns>
        public Form CargarFormulario()
        {
            return this.FormIngresoNumeros;
        }

        public void LimpiarFormulario() 
        {
            FormIngresoNumeros.LimpiarFormulario();
        }

        public int ValidarDatos() 
        {
            int Retorno = 0;
            if (!FormIngresoNumeros.EsValidaApuesta()) 
            {
                Retorno = 1;
            }
            return Retorno;
        }

        public string GetNombre() 
        {
            return this.nombre;
        }

        public static int ValidarIngresos(int numero, List<int> numeros) 
        {
            int Retorno = 0;
            if (numero > 44 || numero < 1) { Retorno = 1; }
            if (numeros.Exists(o => o == numero)) { Retorno = 2; }

            return Retorno;
        }

        public DatosApuesta DatosFormulario() 
        {
            DatosApuesta DatosApuesta = new DatosApuesta();
            IngresoNumeros FormIngresoNumeros = (IngresoNumeros)this.CargarFormulario();
            string DatosFormulario = FormIngresoNumeros.ObtenerApuesta();
            string[] DatosFormularioParsed = DatosFormulario.Split(';');
            DatosApuesta.valores = DatosFormularioParsed[0] + ";" + DatosFormularioParsed[1];
            DatosApuesta.monto = Int32.Parse(DatosFormularioParsed[2]);

            return DatosApuesta;
        }
    }
}
